#include"TcpServer.hpp"
#include"ServerCal.hpp"
#include"Daemon.hpp"


static void  Usage(const std::string& proc)
{
    std::cout << "\nUasge: " << proc << "port\n" << std::endl;
}
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        exit(0);
    }
    uint16_t port = std::stoi(argv[1]);
    ServerCal cal;
    TcpServer* tsvp = new TcpServer(port, std::bind(&ServerCal::Calculator, &cal, std::placeholders::_1));
    tsvp->InitServer();
    Daemon();//守护进程化
    tsvp->Start();


    //测试代码
    // Request req(12, 10, '+');
    // std::string s;
    // req.Serialize(s);

    // s = Encode(s);
    // std::cout << s << std::endl;

    // Response resp(1000, 0);
    // std::string content;
    // //序列化
    // resp.Serialize(content);
    // std::cout << content << std::endl;

    // //封装报头
    // string package = Encode(content);
    //
    // std::cout << package << std::endl;

    // //对报文进行解析
    // content = "";
    // bool r = Decode(package, content);
    // std::cout << content << std::endl;

    // //反序列化
    // Response temp;
    // temp.Desrialize(content);
    // std::cout << temp.result << std::endl;
    // std::cout << temp.code << std::endl;

    //测试代码
    // Request req(123,456, '+');
    // std::string s;
    // //序列化
    // req.Serialize(s);
    // // 封装报头
    // std::string content;
    // content = encode(s);
    // //报文进行解析
    // bool r = Decode(s, content);

    // //把解析后的有效载荷转化为结构数据类型--反序列化
    // Request temp;
    // temp.Desrialize(content);
    // std::cout << temp.x << std::endl;
    // std::cout << temp.op << std::endl;
    // std::cout << temp.y << std::endl;

    return 0;
}